新しいAWS SDK for PHPのラッパー「AWS Resource APIs for PHP」を触ってみた
こんにちは、せーのです。弊社ではJavaやRubyの使い手が多いのですが、私は個人的にPHPが好きだったりします。そんな全国3000万人のペチパーに向けてAWSから新しいSDKラッパーがリリースされたのでご紹介致します。
AWS Resource APIs for PHPってなんだ
AWSには各サービスを色々な言語のコード上で扱えるように各言語毎にSDKが用意されています。PHPにも当然AWS SDK for PHPというSDKが用意されています。 ですが基本的にこのAWS SDK for PHPはAWSサービスに対して1対1で操作するような作り方をしています。識別情報(image-id等)で個別指定するので余り汎用的な感じはしないんですよね。 このAWS Resource APIs for PHPはAWS SDK for PHPとパッケージは分かれているもののAWS SDK for PHPのバージョン3の拡張版として動く高機能のラッパーです。
何ができるの?
このAWS Resource APIs for PHPを使うと何ができるのでしょうか。実はこのラッパーを使うことで個別の識別情報をカプセル化することができます。これによりAWSサービスをよりリソース指向として扱うことが出来るようになります。 AWSはCLIにてタグを使用することでカプセル化する等リソース指向が進んでいます。AWSを使用してシステムを作るときも最近のトレンドとしてサーバー側はREST API化、リソース指向化が進んでいるので、このようなラッパーライブラリはこれから非常に有用になりますね。 現在このラッパーで使えるAWSサービスはAmazon EC2, Amazon Glacier, Amazon S3, Amazon SNS, Amazon SQS, AWS CloudFormation,AWS Identity and Access Management (IAM)になります。それではサンプルコードを実際に動かしてみましょう。
さわってみた
まずEC2を一台立ち上げ、PowerUserのIAM Roleをつけておきます。
ログインした後にAWS Resource APIs for PHPをインストールします。上に書いたようにこのラッパーを使うにはAWS SDK for PHPのバージョン3が必要です。両方共ComposerでインストールできるのでComposerでやっつけましょう。Githubにあるソースとpackagistを書いておきます。
では実際にインストールしていきます。まずはComposerをインストールします。
[ec2-user@ip-172-31-27-131 sdk]$ mkdir sdk [ec2-user@ip-172-31-27-131 sdk]$ cd sdk/ [ec2-user@ip-172-31-27-131 sdk]$ curl -s http://getcomposer.org/installer | php
次にAWS SDK for PHPとAWS Resource APIs for PHPをComposerを使ってインストールします。
{ "require": { "aws/aws-sdk-php": "3.*@dev", "aws/aws-sdk-php-resources": "0.1.0" } }
[ec2-user@ip-172-31-27-131 sdk]$ php composer.phar install
さて、コードを書いていきましょう。まずはS3のバケットの中身を確認してみます。
<?php require 'vendor/autoload.php'; use Aws\Resource\Aws; $aws = new Aws([ 'region' => 'ap-northeast-1', 'version' => 'latest', ]); $bucket = $aws->s3->bucket('testchao2suke'); $object = $bucket->object('image/upper-right.png'); echo $object['LastModified'].PHP_EOL;
[ec2-user@ip-172-31-27-131 sdk]$ php test.php Sat, 03 Jan 2015 14:00:16 GMT [ec2-user@ip-172-31-27-131 sdk]$
バケット内の最終更新日時を取得することができました。次にバケットを作り、画像を追加してみます。
<?php require 'vendor/autoload.php'; use Aws\Resource\Aws; $aws = new Aws([ 'region' => 'ap-northeast-1', 'version' => 'latest', ]); // Create a bucket and object. $bucket = $aws->s3->createBucket([ 'Bucket' => 'aws-sdk-php-resource-cm' ]); $object = $bucket->putObject([ 'Key' => 'images/upper-right.png', 'Body' => fopen('test.png', 'r'), ]);
画像がアップロードされたことが確認出来ました。
まとめ
いかがでしたでしょうか。プレビュー版ということで正直まだ少しバギーなところはありますが、そのうちこなれて来たら使いやすいものになるかと思います。皆さんも是非お試しください。